/*
 * @Author: AskMeWhy
 * @Date: 2020-12-01 18:05:43
 * @Last Modified by: AskMeWhy
 * @Last Modified time: 2021-02-02 18:27:15
 */

import { Component, Mixins } from "vue-property-decorator";
import FormMixin from "@/mixins/form.mixin";
import { State } from 'vuex-class';

interface ModelMeta {
    id: string;
    moduleId: string;
    flowId: string;
    // 表格标题
    name: string;
    // 表格描述
    desc: string;
    // 自定义表单内容
    list: any[];
    // 是否可以发送
    // canSend: boolean;
    // 发送范围
    // sendRangeList: any[];
    // 填报时间
    taskTime: any[];
    // 设为模板
    // isTemplate: boolean;
    // 关联标签
    // tagValue: any[];
    // 关联部门
    departmentValue: any[];
    // 选择流程值
    // flowValue: string;
    // 流程名称
    flowName: string;
    // 流程描述
    flowDesc: string;
}

@Component
export default class FormNormMixin extends Mixins(FormMixin) {
    @State(state => state.authArea) authArea: any;
    // 当前用户所处层级菜单
    get userLevel() {
        return this.$getUserLevel(this.authArea.orgCategoryId);
        // return this.$getUserLevel("6");
    }

    get _isOperation() {
        return ['ADMIN', 'OPERATION_ADMIN', 'OPERATION'].includes(this.userLevel.name);
    }

    get _isTownPage() {
        return this.$route.name === "TownModuleManageForm";
    }

    formType = "add";
    model: ModelMeta = {
        id: "",
        moduleId: "",
        flowId: "",
        // 表格标题
        name: "",
        // 表格描述
        desc: "",
        // 自定义表单内容
        // list: [{
        //     _key: 1,
        //     id: 1,
        //     name: "内容",
        //     type: "内容",
        //     unit: "内容",
        //     rules: "内容",
        //     option: "内容",
        //     required: "内容"
        // }, {
        //     _key: 2,
        //     id: 2,
        //     name: "内容",
        //     type: "内容",
        //     unit: "内容",
        //     rules: "内容",
        //     option: "内容",
        //     required: "内容"
        // }],
        list: [],
        // 是否可以发送
        // canSend: true,
        // 发送范围
        // sendRangeList: [],
        // 填报时间
        taskTime: [],
        // 设为模板
        // isTemplate: false,
        // 关联标签
        // tagValue: [],
        // 关联部门
        departmentValue: [],
        // 选择流程值
        // flowValue: "",
        // 流程名称
        flowName: "",
        // 流程描述
        flowDesc: ""
    };

    mounted() {
        this.init();
    }

    async init() {
        const { id, type, moduleId }: any = this.$route.query;
        this.model.id = id || "";
        this.model.moduleId = moduleId || "";
        this.formType = this.model.id
            ? type === "query"
                ? type
                : "edit"
            : "add";
        if (this.initSearchData) {
            await this.initSearchData();
        }
        this.initData();
    }

    initSearchData() {
        // console.log("initSearchData");
    };

    async initData() {
        if (
            this.formType === "add" ||
            (this.formType === "add" && !this.model.moduleId)
        ) {
            return;
        }
        const response: any = await this.$server["moduleManage/form/query"](
            {
                params: {
                    id:
                        this.formType === "add"
                            ? this.model.moduleId
                            : this.model.id
                }
            }
        );
        if (this.responseHasError(response)) {
            return;
        }
        const data = response.data.data || {};
        const model = {
            // 表格标题
            name: data.templateName || "",
            // 表格描述
            desc: data.description || "",
            // 自定义表单内容
            list: [],
            // 发送范围
            // sendRangeList: data.userIds || [],
            // 填报时间
            // taskTime: data.finishTime || "",
            // 设为模板
            // isTemplate: data.isTemplate,
            // 关联标签
            // tagValue: data.labelId || [],
            // 关联部门
            departmentValue: data.departmentId || []
        };
        model.list = (data.templateDimensionalityVoList || []).map(
            (cur: any, index: any) => {
                let optionValueText = "";
                if (
                    cur.valueLabel === "select" ||
                    cur.valueLabel === "cascader"
                ) {
                    (cur.optionIds || []).forEach(
                        (subCur: any, sindex: any) => {
                            optionValueText +=
                                (sindex === 0 ? "" : ",") + subCur.name;
                        }
                    );
                }
                return {
                    fixed: false,
                    _key: index,
                    // 维度id
                    id: cur.id || "",
                    // 维度名
                    name: cur.name || "",
                    // 值类型id
                    typeId: cur.valueKindId || "",
                    // 值类型typeValue
                    typeValue: cur.valueLabel || "",
                    // 值类型type
                    type: cur.valueKindName || "",
                    // 单位类型id
                    unitValue: cur.unitKindId || "",
                    // 单位类型id
                    unit: cur.unitKindName || "",
                    // 校验规则
                    rules: cur.rules || "",
                    // 选项id
                    optionId: cur.optionId || "",
                    // 选项值
                    optionValueText: optionValueText,
                    optionValueTextNew: "",
                    // 是否必填(1:是-0:否)
                    required: cur.isFilling
                };
            }
        );

        this.model = {
            ...this.model,
            ...model
        };
        this.$nextTick(() => {
            this.resetInterceptRouter();
        });
    }

    async submit(type: any) {
        const {
            // 表格标题
            name,
            // 表格描述
            desc,
            // 自定义表单内容
            list,
            // 是否可以发送
            // canSend,
            // 发送范围
            // sendRangeList,
            // 填报时间
            // taskTime,
            // 设为模板
            // isTemplate,
            // 关联标签
            // tagValue,
            // 关联部门
            departmentValue
        } = this.model;
        const axiosInfo: any = {
            url: ""
        };
        const params: any = {
            status: this.$TASK_MODULE_STATUS[type].value,
            // 表格标题
            templateName: name,
            // 表格描述
            description: desc,
            // 自定义表单内容
            templateDimensionalityVoList: list.map(
                (cur: any, index: number) => {
                    let optionValue = "";
                    // optionValue = cur.optionValueText || "";
                    if (cur.optionValueTextNew) {
                        optionValue = optionValue
                            ? optionValue + "," + cur.optionValueTextNew
                            : cur.optionValueTextNew;
                    }

                    return {
                        // 排序值
                        sort: index + 1,
                        // 维度id
                        id: cur.id,
                        // 维度名
                        name: cur.name || "",
                        // 值类型id
                        valueKindId: cur.typeId,
                        // 单位类型id
                        unitKindId: cur.unitValue,
                        // 校验规则
                        rules: cur.rules || "",
                        // 选项id
                        optionId: cur.optionId || "",
                        // 选项值
                        optionValue: optionValue,
                        // 是否必填(1:是-0:否)
                        isFilling: cur.required,
                        // 是否为系统维度必填(1:是-0:否（用户自定义维度）)
                        isSysDimensionality: !!cur.id
                    };
                }
            ),
            // 发送范围
            // userIds: canSend ? sendRangeList : [],
            // 是否可以发送
            // sendFlag: canSend,
            // 开始时间
            // startTime: canSend ? taskTime[0] || "" : "",
            // 截至日期
            // finishTime: canSend ? taskTime[1] || "" : "",
            // 设为模板
            // isTemplate,
            // 关联标签
            // labelId: tagValue,
            // 关联部门
            departmentId: departmentValue
        };
        if (this.formType === "add") {
            axiosInfo.url = "moduleManage/form/add";
        }
        if (this.formType === "edit") {
            params.id = this.model.id;
            axiosInfo.url = "moduleManage/form/update";
        }
        // TODO remove
        console.log(params, axiosInfo, type);
        const response = await this.$server[axiosInfo.url]({
            data: params
        });
        if (this.responseHasError(response)) {
            return;
        }
        this.$message({
            message: "操作成功",
            type: "success",
            duration: 1500
        });
        this.resetInterceptRouter(() => {
            this.goBack();
        });
    }
}
